/*
//   Copyright 2008 Dear Soft(http://dear-soft.com)
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
 */

package com.dear.soft.components.properties.renderers;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

import com.dear.soft.components.properties.Category.CategoryValue;
import com.dear.soft.components.properties.PropertyDescriptor.PropertyValue;

public class ValueCellRenderer extends DefaultTableCellRenderer {
	private static final long serialVersionUID = 1L;
	private static final Color BG = new Color(234, 234, 234);

	private Font baseFont = null;

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		if (value instanceof PropertyValue) {
			super.setBackground(null);
		}
		if (value instanceof CategoryValue) {
			isSelected = false;			
		}
		hasFocus = false;
		Component c = super.getTableCellRendererComponent(table, value,
				isSelected, hasFocus, row, column);
		if (c instanceof JLabel) {
			JLabel label = (JLabel) c;
			setValue(label, value);
			setBackground(label, value);
			label.setFont(getFont(table, value));
		}
		return c;
	}

	private void setBackground(JLabel label, Object value) {
		if (value instanceof CategoryValue) {
			label.setBackground(BG);
		}
	}

	private void setValue(JLabel label, Object value) {
		if (value instanceof CategoryValue) {
			setValue("");
		}

		if (value instanceof PropertyValue) {
			setValue(((PropertyValue) value).ref.getValue());
		}
	}

	private Font getFont(JTable table, Object value) {
		if (baseFont == null) {
			baseFont = table.getFont();
		}
		if (!baseFont.equals(table.getFont())) {
			baseFont = table.getFont();
		}
		return baseFont;
	}
}
